{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Lecture 6: BucketSort and RadixSort"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from lecture6_aux import *\n",
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from random import choice\n",
    "import time"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### First, we implement bucketSort. \n",
    "\n",
    "We are using a data structure defined in lecture6_aux for both the FIFO queues and for the things we put in them."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# A is a list to sort.\n",
    "# A contains objects that have a \"key\" attribute, where \"key\" is between 0 and bucketMax - 1\n",
    "def bucketSort(A, bucketMax=10):\n",
    "    # initialize a separate queue for each bucket.  \n",
    "    # myQueue is a simple queue class defined in the auxiliary python file.\n",
    "    T = [ myQueue() for i in range(bucketMax) ] \n",
    "    for x in A:\n",
    "        T[x.key()].push(x)\n",
    "    # now return the concatenated buckets.\n",
    "    ret = []\n",
    "    for i in range(bucketMax):\n",
    "        ret += T[i].getList()\n",
    "    return ret\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 2, 2, 3, 3, 4, 4, 5, 5]\n"
     ]
    }
   ],
   "source": [
    "# sanity check\n",
    "A = [myInt(x) for x in [5,4,3,2,1,2,3,4,5]]\n",
    "print([ a.key() for a in bucketSort(A) ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# radixSort can sort nDigit-long integers\n",
    "# notice that if the base isn't 10 we probably shouldn't call these \"digits,\" but oh well...\n",
    "def radixSort(A, nDigits, base=10):\n",
    "    # replace A with a list of \"myInts\" (from the lecture 6 auxiliary file).\n",
    "    B = [ myInt(x, base=base) for x in A ]\n",
    "    # now repeatedly run bucketSort\n",
    "    for j in range(nDigits):\n",
    "        # first update the digit that is the key\n",
    "        for x in B:\n",
    "            x.updateKeyDigit(j)\n",
    "        # now do bucketSort on that digit\n",
    "        B = bucketSort(B,bucketMax=base)\n",
    "    # now B should be sorted!\n",
    "    return B    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[4, 12, 33, 123, 523]\n"
     ]
    }
   ],
   "source": [
    "A = [523,123,4,33,12]\n",
    "B = radixSort(A, 3, 10)\n",
    "print([ b.getValue() for b in B ])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## What base should we use?\n",
    "\n",
    "Below, we try out radixSort for many different values of base, and a few different choices of M, the largest element that may occur in the list that we're trying to sort."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here's a function which runs radixSort a bunch of times for a given n, M, and base.\n",
    "def timeInBase(n, M, base, numTrials=400):\n",
    "    nValues = []\n",
    "    tValues = []\n",
    "    runtime = 0\n",
    "    for t in range(numTrials):\n",
    "        lst = [ choice(range(M)) for i in range(n) ] # generate a random list of length n, no bigger than M\n",
    "        start = time.time()\n",
    "        # the number of digits is log_base(M)\n",
    "        nDigits = int(np.ceil(np.log(M)/np.log(base)))\n",
    "        radixSort( lst , nDigits, base=base)\n",
    "        end = time.time()\n",
    "        runtime += (end - start) * 1000 # measure in milliseconds\n",
    "    runtime = runtime/numTrials\n",
    "    return runtime\n",
    "\n",
    "def generateData(n,M, bases):\n",
    "    data = []\n",
    "    for base in bases: \n",
    "        data.append( timeInBase(n,M,base) )\n",
    "    return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# generate a bunch of data for different values of n, M, and base.\n",
    "# (Below we only have one choice for n, but if you want to play around you can add more.)\n",
    "ns = [100]\n",
    "Ms = [10,1000, 1000000, 1000000000]\n",
    "bases = [2,4,6,8] + list(range(10, 100, 5)) + list(range(200, 400, 50))\n",
    "datas = {}\n",
    "for M in Ms:\n",
    "    for n in ns:\n",
    "        datas[(M,n)] = generateData(n,M,bases)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for n in ns:\n",
    "    cols = [\"red\",\"blue\",\"green\",\"black\"]\n",
    "    styles = [\"-\", \"-.\", \"--\",\":\"]\n",
    "    for i in range(len(Ms)):\n",
    "        plt.plot( bases, datas[(Ms[i],n)], styles[i], color=cols[i], label=\"M=\" + str(Ms[i]))\n",
    "    plt.title(\"Effect of base on running time of radixSort (n=\" + str(n) + \")\")\n",
    "    plt.xlabel('base r')\n",
    "    plt.ylabel(\"Running time (ms)\")\n",
    "    plt.ylim([0,3]) ## useful for the plot that I got.\n",
    "    plt.legend()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# generate a bunch of data for different values of n, M, and base.\n",
    "# (This time, we'll fix M and look at a few different n's)\n",
    "ns2 = [50, 150, 250, 350]\n",
    "Ms2 = [1000]\n",
    "bases2 = [2,4,6,8] + list(range(10, 100, 5)) + list(range(200, 400, 50))\n",
    "datas2 = {}\n",
    "for M in Ms2:\n",
    "    for n in ns2:\n",
    "        datas2[(M,n)] = generateData(n,M,bases2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for M in Ms2:\n",
    "    cols = [\"red\",\"blue\",\"green\",\"black\"]\n",
    "    styles = [\"-\", \"-.\", \"--\",\":\"]\n",
    "    for i in range(len(ns2)):\n",
    "        plt.plot( bases2, datas2[(M, ns2[i])], styles[i], color=cols[i], label=\"n=\" + str(ns2[i]))\n",
    "    plt.title(\"Effect of base on running time of radixSort (M=\" + str(M) + \")\")\n",
    "    plt.xlabel('base r')\n",
    "    plt.ylabel(\"Running time (ms)\")\n",
    "    plt.ylim([0,3]) ## useful for the plot that I got.\n",
    "    plt.legend()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
